package com.zkh.myutils.bean;

import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;

import com.zkh.myutils.io.log.Logger;

/**
 * 类型转换器管理器，用来管理类型转换器
 * @author zkh
 */
public final class TypeConverterManager {
	
	//所有注册类型（根据类型去重）
	private final Map<Class<?>, TypeConverter<?>> typeConverterMap = new HashMap<>();
	
	/**
	 * 获取转换器
	 * @param cls 类class
	 */
	public TypeConverter<?> getConverter(Class<?> cls){
		//遍历集合
		for(Entry<Class<?>, TypeConverter<?>> kv: typeConverterMap.entrySet()) {
			//是否存在
			if(cls.isAssignableFrom(kv.getKey())) {
				return kv.getValue();
			}
		}
		//未找到，返回空
		return null;
	}
	
	/**
	 * 注册转换器
	 * @param converter 转换器，因转换器为泛型，故不能使用转换器的数组形式，每个转换器都须单独注册。
	 */
	public void registerConverter(TypeConverter<?> converter) {
		//类型已存在转换器
		if(typeConverterMap.containsKey(converter.getTargetClass())) {
			Logger.warn("注册已存在的转换类型，已覆盖原先注册的转换器");
		}
		//保存转换器
		typeConverterMap.put(converter.getTargetClass(), converter);
	}

	/**
	 * 移除转换器
	 * @param converter 转换器
	 */
	public TypeConverter<?> removeConverter(TypeConverter<?> converter) {
		return typeConverterMap.remove(converter.getTargetClass());
	}
}
